Procedure i funkcije obično nazivamo potprogramima. Zbog toga, kada kažemo potprogram mislimo bilo na proceduru bilo na funkciju. Jasno je da su potprogrami delovi nekog programa.
U potprogramu svaki opisani objekat se smatra lokalnim za taj potprogram i može se koristiti samo u okviru tog potprograma. Daklem svaki takav objekat (npr. promenljiva, konstanta, tip ... ) je nedostupan glavnom programu iz kojeg se taj potprogram poziva. Opštije, pošto potprogram može biti opisan i u okviru nekog potprograma, lokalne promenljive su nedostupne spoljašnjem potprogramu. Svaki objekat koji je opisan u osnovnom (glavnom) programu se smatra globalnim i može se koristiti ne samo u glavnom programu već i u bilo kom potprogramu. Direktan pristup globalnim objektima (pre svega promenljivama) iz potprograma se ne preporučuje, već se preporučuje pristup tim promenljivama kroz parametre potprograma. Primer lokalne promenljive: procedure p; var a: integer; begin ... end; Primer Globalne promenljive: var a: integer; procedure p; begin ... end; Šta izvršavaju sledeći programi ? Program P1; var x:integer; Procedure promena; begin x:=1; end; BEGIN x:=0; promena; writeln (x); {1} END. Program P2; var x:integer; Procedure promena; var x:integer; begin x:=1; end; BEGIN x:=0; promena; writeln (x); {0} END. Iz gornjih primera vidimo da : 1. procedure ne moraju imati parametre, 2. procedure za razliku od funkcija ne vraćaju neku vrednost, 3. Ako u potprogramu postoji promenljiva koja ima isto ime kao i neka globalna promenljiva, onda se ta globalna promenljiva ne može videti iz tog potprograma. Primeri procedura Procedure mogu da vrate neku vrednost u glavni program ali kroz parametre. Za sada ćemo samo reći: ako neki potprogram treba da vrati neku vrednost u glavni program kroz parametar, onda taj parametar mora biti naveden sa rezervisanom rečju var. A kasnije ćemo videti tačnu razliku između vrednosnih i promenljivih parametara. Napisati proceduru kojom se izračunavaju minimum i maksimum na osnovu dva zadata cela broja. Procedure minimax (a,b:integer; Var min,max:integer); Begin if a>b then Begin min:=b; max:=a; End else Begin min:=a; max:=b; End; End; Primer 2. Procedure razmeni (var a,b:real); Var t:real; Begin t:=a; a:=b; b:=t; End; |